-- Panel
-- create by chendh
-- 普通容器相关工具函数

-------------------------------------------------------------------------------
-- 初始化普通容器内的单元格
-- @param windowNode    界面节点
-- @param panelNode     容器节点
-- @param itemNode      单元格的节点
-- @param totalNum      单元格总数
-- @param sortType      排列方式
-- @param maxRowNum     最大行数
-- @param maxColNum     最大列数
-- @param wGap          单元格间距(横向)
-- @param hGap          单元格间距(纵向)
-- @param iconWidth     单元格宽度
-- @param iconHeight    单元格高度
-- @param topHGap       上下留白
-- @param leftWGap      左右留白
-- @param touchEvent    点击事件注册函数
function initPanelGrids(windowNode, panelNode, itemNode, totalNum, sortType, maxRowNum, maxColNum, wGap, hGap, iconWidth, iconHeight, topHGap, leftWGap, touchEvent)
    local w = DESIGN_WIDTH;
    local h = DESIGN_HEIGHT;

    -- 计算单元格分布情况
    local gridList = {};

    if sortType == "Vertical" then
        gridList = sortGridsVertical(totalNum, maxRowNum);
    else
        gridList = sortGridsHorizontal(totalNum, maxColNum)
    end

    -- 行数
    local rowNum = #gridList;

    -- 列数
    local colNum = 0;

    -- 取所有行的列数的最大值作为最大列数
    for _, rowList in ipairs(gridList) do
        if type(rowList) == "table" then
            colNum = math.max(colNum, #rowList);
        end
    end

    -- 先计算总高度、宽度
    local totalHeight = rowNum * (iconHeight + hGap) - hGap + topHGap * 2;
    local totalWidth  = colNum * (iconWidth + wGap) - wGap + leftWGap * 2;

    -- 设置区域大小
    panelNode:setContentSize(cc.size(totalWidth, totalHeight));

    local widget = replaceNodeWithWidget(itemNode);

    for i = 1, rowNum do
        for j = 1, #gridList[i] do
            local child = widget:clone();
            child:setName("item" .. gridList[i][j]);
            child.index = gridList[i][j];

            -- 计算单元格坐标
            -- 这个坐标将是单元格的描点所在
            local x = (j - 1) * (iconWidth + wGap) + iconWidth / 2 + leftWGap;
            local y = (maxRowNum - i) * (iconHeight + hGap) - hGap + topHGap + iconHeight / 2;

            if touchEvent then
                touchEvent(windowNode, child);
            end

            child:setPositionX(x);
            child:setPositionY(y);

            panelNode:addChild(child)
            table.insert(panelNode.rows, child)
        end
    end
end

----------------------------------------------
-- 单元格横向排序
-- @param totalNum      单元格总数
-- @param maxColNum     最大列数
function sortGridsHorizontal(totalNum, maxColNum)
    local ret = {};
    local maxRowNum = math.ceil(totalNum / maxColNum);

    -- 横向排序排序
    -- 1， 2， 3，
    -- 4,  5,  6，
    -- 7， 8，
    for i = 1, maxRowNum do
        for j = 1, maxColNum do
            local num = (i - 1) * maxColNum + j;
            if num <= totalNum then
                if not ret[i] then
                    ret[i] = {}
                end
                table.insert(ret[i], num);
            end
        end
    end

    return ret;
end

----------------------------------------------
-- 单元格纵向排序
-- @param totalNum      单元格总数
-- @param maxRowNum     最大行数
function sortGridsVertical(totalNum, maxRowNum)
    local ret = {};
    local maxColNum = math.ceil(totalNum / maxRowNum);

    -- 竖向排列
    -- 1， 3， 5， 7， 9
    -- 2， 4， 6， 8， 10
    for i = 1, maxRowNum do
        for j = 1, maxColNum do
            local num = (j - 1) * maxRowNum + i;

            if num <= totalNum then
                if not ret[i] then
                    ret[i] = {}
                end

                table.insert(ret[i], num);
            end
        end
    end

    return ret;
end

